package biblioteca.etiquetas;

import java.io.IOException;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import biblioteca.dao.BibliotecaDAO;
import biblioteca.dao.exceptions.BibliotecaDAOException;
import biblioteca.dao.impl.BibliotecaDAOImp;
import biblioteca.modelo.Libro;
import biblioteca.modelo.Utilidades;

public class LibroTag extends TagSupport{
	String referencia;
	List<Libro> libros;	

	//objeto logger
	final Log logger= LogFactory.getLog(getClass());
	
	@Override
	public int doEndTag() throws JspException {
		return EVAL_PAGE;
	}
	
	@Override
	public int doStartTag() throws JspException {
		JspWriter print = pageContext.getOut();
	
		try{
			List<Libro> listaLibros=getLibros();
			logger.info("esta es la lista de libros: "+listaLibros);
			HttpServletRequest request=(HttpServletRequest) pageContext.getRequest();
			//rescato el DAO de la aplicacion
			BibliotecaDAO dao=(BibliotecaDAO) request.getSession().getServletContext().getAttribute("dao");
			
			//busco el libro a mostrar en la lista de libros			
			Libro libro=new Libro();
			libro.setReferencia(this.getReferencia());
			libro=dao.buscarLibro(libro);
			logger.info("datos del libro solicitado: "+libro);
			
			if(libro==null){
				print.println("<b>No se ha encontrado el libro</b>");
				logger.error("No se ha encontrado el libro con referencia: "+this.getReferencia());
			}
			else{				
				print.println(libro+"<br />");
			}
			
		} catch (IOException e) {			
			e.printStackTrace();
		} catch (BibliotecaDAOException e) {			
			e.printStackTrace();
		}
		
		return SKIP_BODY;
	}

	public String getReferencia() {
		return referencia;
	}

	public void setReferencia(String referencia) {
		this.referencia = referencia;
	}

	public List<Libro> getLibros() {
		return libros;
	}

	public void setLibros(List<Libro> libros) {
		this.libros = libros;
	}
	
	
}
